/*
 * Bomba.cpp
 *
 *  Created on: 27/08/2008
 *      Author: samuel.grigolato
 */

#include "Bomba.h"
#include "Fogo.h"
#include <typeinfo>

Bomba::Bomba() {
	TempoInicioContagem = SDL_GetTicks();
	ControleAnimacao.Oscillate = true;
	PoderFogo = 0;
	Explodiu = false;
	Solido = true;
	Dono = NULL;
}

Bomba::~Bomba() {
	//
}

void Bomba::OnLoop() {
	CEntity::OnLoop();
	long tempoAtual = SDL_GetTicks();
	if ((tempoAtual - TempoInicioContagem) > 3000) {
		Explode();
	}
}

void Bomba::Explode() {
	if (Explodiu)
		return;
	Explodiu = true;
	Dono->LimiteBombas++;
	CriaFogo();
	Trash = true;
}

void Bomba::CriaFogo() {

	Fogo* fogo;
	fogo = new Fogo();
	fogo->AnimState = 0;
	fogo->X = X;
	fogo->Y = Y;

	fogo->PoderFogoBaixo = PoderFogo;
	fogo->PoderFogoCima = PoderFogo;
	fogo->PoderFogoEsquerda = PoderFogo;
	fogo->PoderFogoDireita = PoderFogo;

	fogo->Init(TileX, TileY);

	fogo->ProcessaColisoes(FOGO);
}

bool Bomba::Init(int posicaoX, int posicaoY) {
	CEntity::Init(posicaoX, posicaoY);

	int LarguraTela = CParametros::GetLarguraJanela();
	int AlturaTela = CParametros::GetAlturaJanela();
	int LarguraTile = CParametros::GetLarguraTile();
	int AlturaTile = CParametros::GetAlturaTile();

	X = ((LarguraTela - (LarguraTile * CParametros::GetLarguraMapa())) / 2)
			+ (LarguraTile * posicaoX);
	Y = ((AlturaTela - (AlturaTile * CParametros::GetAlturaMapa())) / 2)
			+ (AlturaTile * posicaoY);

	if (OnLoad("./gfx/bomba.bmp", LarguraTile, AlturaTile, 3) == false) {
		return false;
	}

	CEntity::EntityList->insert(CEntity::EntityList->begin(), this);

	return true;
}

void Bomba::ProcessaColisao(CEntity* Entidade, TipoColisao TpColisao) {
	if (TpColisao == FOGO) {
		Explode();
	}
}

